// Copyright 2007-2009 Stuart Caborn, Alex Scordellis
//  
//  Licensed under the Apache License, Version 2.0 (the "License"); you may not
//  use this file except in compliance with the License. You may obtain a copy of
//  the License at
//  
//  http://www.apache.org/licenses/LICENSE-2.0
//  
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
//  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
//  License for the specific language governing permissions and limitations under
//  the License.
// 


using System.Reflection;
using NSynthesis.Reflection;

namespace NSynthesis
{
    public class RealMethodCall
    {
        private readonly MethodInfo methodCalled;
        private string description;

        public RealMethodCall(MethodInfo methodCalled)
        {
            this.methodCalled = methodCalled;
        }

        public string Description
        {
            get { return description = description ?? methodCalled.Description(); }
        }

        public int Hits { get; set; }

        public bool Satisfies(MethodInfo methodToSatisfy)
        {
            return methodCalled.MetadataToken.Equals(methodToSatisfy.MetadataToken);
        }
        
        public override string ToString()
        {
            return "RealMethodCall: " + methodCalled.Description();
        }
    }
}
